home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 1 / Meeting Pearls Vol 1 (1994).iso / installed_progs / gfx / lise2.1 / lise / src / gfx.h < prev    next >
Encoding:
C/C++ Source or Header  |  1993-06-16  |  6.3 KB  |  357 lines

  1. /* include file to provide graphics */
  2. /* functions supported:
  3.    tekopen();
  4.    vectoa(x,y) int x,y;
  5.    posita(x,y) int x,y;
  6.    dperas();
  7.    gfxfont(number,size) int number,size;
  8.    gfxtext(s,a) char s[]; float a;
  9.    textlen(s) char s[];
  10.    textheight()
  11.    getxy(x,y) int *x,*y;
  12.    gfxflush();
  13.    textparam(sx,sy,tx,ty,w,namw) int sx,sy,tx,ty,w; char *name;
  14.    rmtek();
  15.    setcolour(n) int n;
  16.    special_gfx(s) char *s;        do special operations like PostScript output
  17. */
  18. #ifdef AMIGA
  19. #define TEKPIPENAME0 "PIPE:tek0"
  20. #define TEKPIPENAME1 "PIPE:tek1"
  21. #define TEKPIPENAME2 "PIPE:tek2"
  22. #define TEKPIPENAME3 "PIPE:tek3"
  23. #define TMPGCURSOR   "t:gcursor"
  24. #define ASHBDRY      "t:ashbdry" 
  25. #endif
  26. #ifdef UNIX
  27. #define TEKPIPENAME0 "/dev/tek.pipe"
  28. #define TEKPIPENAME1 "/dev/tek.pipe1"
  29. #define TEKPIPENAME2 "/dev/tek.pipe2"
  30. #define TEKPIPENAME3 "/dev/tek.pipe3"
  31. #define ASHBDRY      "/tmp/ashbdry"
  32. #endif
  33.  
  34. #define _TEKXMAX 4096
  35. #define _TEKYMAX 3120
  36.  
  37. #ifndef _SPECHDR
  38. #include <auxcfg.h>
  39. #include <spec.h>
  40. #endif
  41.  
  42.  
  43. int  _tek4014,
  44.      _tek4014_flg = 0,
  45.      _gfxbufp = 0,
  46.      _gfxfontnr = 1,
  47.      _gfxfontsz = 1;
  48. int  _lasttextheight = 0;
  49.  
  50. char *_tekname, *_tekoname;
  51.  
  52. unsigned char _gfxbuf[8192];
  53.     
  54.  
  55. tekopen()
  56. {
  57. char c,s[80],z[80],str[80],name[80];
  58. char *display;
  59. int i,n,m;
  60.  
  61.    _tekname = (char *) malloc(128);
  62.    _tekoname = (char *) malloc(128);
  63.  
  64.    strcpy(name,"OUTPUT");
  65.    if(_tekpipe == 0) strcpy(name,"ANALYSIS");
  66.    if(_tekpipe == 1) strcpy(name,"ON_LINE");
  67.    if(_tekpipe == 2) strcpy(name,"EXTRA");
  68.    strcpy(s,"gfx");
  69.    c=_tekpipe+48;
  70.    z[0]=c; z[1]=0;
  71.    strcat(s,z);
  72.    display = (char *)getenv("DISPLAY"); /* used to identify ASCII terminals */
  73.    _tek4014=auxopen(s); /* _tekpipe is defined in spec.h */
  74.  
  75.    if(_tek4014 <= 0) {
  76.       sprintf(str,"(xterm -t -T %s %c400x400+0+0 -e $LISEPRG/tekdaemon -p %d )&",name,'%',_tekpipe);
  77.       if(display != NULL) {
  78.          system(str); sleep(6);
  79.       } else {
  80.          system("$LISEPRG/tekdaemon&");
  81.       }
  82.       n = 0;
  83.       while(n < 30) {
  84.          sleep(1);
  85.          _tek4014=auxopen(s); /* _tekpipe is defined in spec.h */
  86.          if(_tek4014 > 0) break;
  87.       }
  88.       if(_tek4014 <= 0) {
  89.       sprintf(str,"(xterm -t -T %s %c400x400+0+0 -e tekdaemon -p %d )&",name,'%',_tekpipe);
  90.       if(display != NULL) {
  91.          system(str); sleep(6);
  92.          } else {
  93.             system("tekdaemon&");
  94.          }
  95.          n = 0;
  96.          while(n < 30) {
  97.             sleep(1);
  98.             _tek4014=auxopen(s); /* _tekpipe is defined in spec.h */
  99.             if(_tek4014 > 0) break;
  100.          }
  101.       }
  102.    }
  103.    if(_tek4014 <= 0) {
  104.       fprintf(stderr,"failed to open graphic pipe\n");
  105.    }
  106.  
  107.    strcpy(_tekname,auxparams[0]);
  108.    strcpy(_tekoname,_tekname); strcat(_tekoname,"o");
  109.  
  110.    return(_tek4014);
  111. }
  112.  
  113. gfxflush()
  114. {
  115. int  n;
  116.  
  117.    write(_tek4014,_gfxbuf,_gfxbufp);
  118.    _gfxbufp=0;
  119. }
  120.  
  121. gfxbufin(n)
  122. int n;
  123. {
  124. _gfxbuf[_gfxbufp++]=n;
  125. if(_gfxbufp>8190) gfxflush();
  126. }
  127.  
  128. cvtxy(xx,yy)
  129. int xx,yy;
  130. {
  131. int n,m,i,xh,yh,x,y;
  132. int x4, y4, xl, yl;
  133. char ch,cl;
  134.  
  135.    switch(_win_flg){
  136.    case 0:
  137.       x=xx ; y=yy; break;
  138.    case 1:
  139.       x=xx ; y=yy/2; break;
  140.    case 2:
  141.       x=xx ; y=yy/2 + (_TEKYMAX/2); break;
  142.    case 3:
  143.       x=xx/2 ; y=yy/2 + (_TEKYMAX/2); break;
  144.    case 4:
  145.       x=xx/2 + (_TEKXMAX/2) ; y=yy/2 + (_TEKYMAX/2); break;
  146.    case 5:
  147.       x=xx/2 ; y=yy/2; break;
  148.    case 6:
  149.       x=xx/2 + (_TEKXMAX/2) ; y=yy/2; break;
  150.    }
  151.    x4 = x >> 2; y4 = y >> 2;
  152.    yh = y4 >> 5; yl = y4 & 31;
  153.    xh = x4 >> 5; xl = x4 & 31;
  154.    i = (x & 3) + 4 * (y & 3); 
  155.    gfxbufin(yh | 32);
  156.    gfxbufin(i | 96);
  157.    gfxbufin(yl | 96);
  158.    gfxbufin(xh | 32);
  159.    gfxbufin(xl | 64);
  160. }
  161.  
  162. posita(x,y)
  163. int x,y;
  164. {
  165.    int  n,m;
  166.  
  167.    gfxbufin(0x1d);
  168.    if(x > _TEKXMAX) x = _TEKXMAX;
  169.    if(x < 0) x = 0;
  170.    if(y > _TEKYMAX) y = _TEKYMAX;
  171.    if(y < 0) y = 0;
  172.    cvtxy(x,y);
  173. }
  174.  
  175. vectoa(x,y)
  176. int x,y;
  177. {
  178.    int  n,m;
  179.  
  180.    if(x > _TEKXMAX) x = _TEKXMAX;
  181.    if(x < 0) x = 0;
  182.    if(y > _TEKYMAX) y = _TEKYMAX;
  183.    if(y < 0) y = 0;
  184.    cvtxy(x,y);
  185. }
  186.  
  187. dperas()
  188. {
  189.    gfxbufin(0x1b);
  190.    gfxbufin(0x0c);
  191.    gfxflush();
  192. }
  193.  
  194.  
  195. getxy(x,y)
  196. int *x,*y;
  197. {
  198.    int n,i,fp;
  199.    char s[8];
  200.  
  201.    n=0;
  202.    gfxbufin(0x1b);
  203.    gfxbufin(0x1a);
  204.    gfxflush();
  205.    fp=-1;
  206.    while(fp<0) {
  207.       sleep(1);
  208.       fp=open(_tekoname,2);
  209.    }
  210.    i=read(fp,s,5);
  211.    close(fp);
  212.    *x = 4 * ((s[0] & 31)*32+(s[1] & 31));
  213.    *y = 4 * ((s[2] & 31)*32+(s[3] & 31));
  214. }
  215.  
  216.  
  217. textlen(str)
  218. char *str;
  219. {
  220.    int n,i,fp;
  221.    char s[12];
  222.  
  223.    gfxbufin(0x1b);
  224.    gfxbufin(0x1c);
  225.    n = 0; while(str[n] != 0) gfxbufin(str[n++]);
  226.    gfxbufin(0);
  227.    gfxflush();
  228.    fp=-1;
  229.    while(fp<0) {
  230.       fp=open(_tekoname,2);
  231.    }
  232.    i=read(fp,s,10);
  233.    close(fp);
  234.    sscanf(s,"%d\n",&i);
  235.    return(i);
  236. }
  237.  
  238. textheight()
  239. {
  240.    int i,n,fp;
  241.    char s[12];
  242.  
  243.    if(_lasttextheight != 0) return(_lasttextheight);
  244.    gfxbufin(0x1b);
  245.    gfxbufin(0x1e);
  246.    gfxflush();
  247.    fp=-1;
  248.    while(fp<0) {
  249.       fp=open(_tekoname,2);
  250.    }
  251.    i=read(fp,s,10);
  252.    close(fp);
  253.    sscanf(s,"%d\n",&_lasttextheight);
  254.    return(_lasttextheight);
  255. }
  256.  
  257. gfxtext(s,a)
  258. char s[];
  259. float a;
  260. {
  261. int n;
  262. char z[256];
  263.  
  264. gfxflush();
  265. z[0]=0x1b;
  266. z[1]=0;
  267. if(_win_flg==0) {
  268.    strcat(z,"9"); /* normal text size */
  269. } else {
  270.    strcat(z,";"); /* small text size */
  271. }
  272. strcat(z,s);
  273. gfxbufin(0x1f);
  274. for(n=0;n<strlen(z);n++) gfxbufin(z[n]);
  275. gfxflush();
  276. }
  277.  
  278.  
  279. setcolour(n)
  280. int n;
  281. {
  282. ;
  283. }
  284.  
  285. rmtek()
  286. {
  287. dperas();
  288. gfxbufin(0x1b);
  289. gfxbufin(0x40);
  290. gfxflush();
  291. }
  292.  
  293.  
  294. textparam(sx,sy,tx,ty,w,name)
  295. int sx,sy,tx,ty,w;
  296. char name[];
  297. {
  298. int i,n;
  299. char c,s[80];
  300.  
  301. gfxflush();
  302. sprintf(s,"0 %d %d %d %d %d %s",sx,sy,tx,ty,w,name); /* 0 signal textparam */
  303. gfxbufin(0x1b) ; /* ESC */
  304. gfxbufin(0x1b) ; /* second escape read special functions */
  305. i=0; c=1;
  306. while(c!=0) {    /* special sequence is finished when 0 is reached */
  307.    c=s[i++];
  308.    gfxbufin(c);
  309. }
  310. gfxflush();
  311. }
  312.  
  313. hco(str)
  314. char str[];
  315. {
  316. int i,n;
  317. char c,s[80];
  318.  
  319. gfxflush();
  320. sprintf(s,"1 %s",str); /* 1 signal hardcopy */
  321. gfxbufin(0x1b) ; /* ESC */
  322. gfxbufin(0x1b) ; /* second escape read special functions */
  323. i=0; c=1;
  324. while(c!=0) {    /* special sequence is finished when 0 is reached */
  325.    c=s[i++];
  326.    gfxbufin(c);
  327. }
  328. gfxflush();
  329. }
  330.  
  331.  
  332.  
  333.  
  334. gfxfont(number,size)
  335. int number,size;
  336. {
  337. _gfxfontnr=number;
  338. _gfxfontsz=size;
  339. }
  340.  
  341. special_gfx(s)
  342. char *s;
  343. {
  344. int i,n;
  345. char c;
  346.  
  347.    gfxflush();
  348.    gfxbufin(0x1b) ; /* ESC */
  349.    gfxbufin(0x1b) ; /* second escape read special functions */
  350.    i=0; c=1;
  351.    while(c!=0) {    /* special sequence is finished when 0 is reached */
  352.       c=s[i++];
  353.       gfxbufin(c);
  354.    }
  355.    gfxflush();
  356. }
  357.